
#include <stdio.h>
#include <unistd.h>
#include <stdint.h>

#include "thread.h"
#include <assert.h>

/* Fonction exécutée en parallèle par les deux threads */
void *f(void *parametre) {
	/* Récupérer le paramètre du thread, pour convertir en int il faut
	 * passer par l'entier intptr_t qui a la même taille qu'un pointeur */
	int n = (intptr_t) parametre;

	int i;
	/* Chacun imprime 5 ou 10 fois */
	for (i = 0; i < n*5; i++) {
		fprintf(stderr,"je suis le thread %d\n", n);
		//sleep(1);
	}

	/* Et termine */
	printf("je vais mourrir\n");
	thread_exit(NULL);
}

/* Thread principal */
int main(void) {
	thread_t t1, t2;
	int i,j;

	/* Créer deux threads */
	thread_create(&t1, f, (void*)(intptr_t) 1);
	thread_create(&t2, f, (void*)(intptr_t) 2);
	fprintf(stderr,"main a fini de créer !\n");

	/* Les threads commencent à s'exécuter en parallèle */
	//sleep(1);
	fprintf(stderr,"je suis le thread principal\n");
	//sleep(1);

	fprintf(stderr,"le thread principal attend les autres\n");
	/* On attend la terminaison du premier */
	thread_join(t1, &i);
	fprintf(stderr,"t1 a fini !\n");

	/* On attend la terminaison du second */
	thread_join(t2, &j);
	fprintf(stderr,"t2 a fini !\n");

	return 0;
}


